multipress: Only emit preedit signals if needed
authorMatthias Clasen <mclasen@redhat.com>
Tue, 18 Aug 2015 19:42:56 +0000 (15:42 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 18 Aug 2015 19:44:45 +0000 (15:44 -0400)
When clearing the compose buffer, don't emit preedit-changed
unconditionally. This triggers a recursion which leads to
a crash.

https://bugzilla.gnome.org/show_bug.cgi?id=753644

modules/input/gtkimcontextmultipress.c

index 9cfe0289af2464a146bc9d9d137778d8fbd0b1e7..b92570bdbd441a911285d1a9feb51b08fa46b608 100644 (file)
@@ -170,11 +170,14 @@ clear_compose_buffer (GtkImContextMultipress *multipress_context)
   multipress_context->key_last_entered = 0;
   multipress_context->compose_count = 0;
 
-  multipress_context->tentative_match = NULL;
   cancel_automatic_timeout_commit (multipress_context);
 
-  g_signal_emit_by_name (multipress_context, "preedit-changed");
-  g_signal_emit_by_name (multipress_context, "preedit-end");
+  if (multipress_context->tentative_match)
+    {
+      multipress_context->tentative_match = NULL;
+      g_signal_emit_by_name (multipress_context, "preedit-changed");
+      g_signal_emit_by_name (multipress_context, "preedit-end");
+    }
 }
 
 /* Finish composing, provide the character, and clear our compose buffer.